উদাহরণ সহ OAuth2 Integration

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) - Spring Boot এবং OAuth2 Integration
148

স্প্রিং বুট ক্লায়েন্টে OAuth2 ব্যবহার করে API-এর সাথে সুরক্ষিত যোগাযোগ স্থাপন করতে হলে নির্দিষ্ট কনফিগারেশন এবং টুল ব্যবহার করতে হয়। OAuth2 ইনটিগ্রেশনের জন্য স্প্রিং সিকিউরিটির spring-boot-starter-oauth2-client ডিপেনডেন্সি ব্যবহার করা হয়। এখানে উদাহরণসহ OAuth2 ইন্টিগ্রেশনের সম্পূর্ণ প্রক্রিয়া দেখানো হলো।


১. প্রজেক্ট সেটআপ

ডিপেনডেন্সি যোগ করুন

pom.xml-এ OAuth2 ক্লায়েন্টের জন্য নিচের ডিপেনডেন্সি যুক্ত করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

Gradle ব্যবহার করলে:

implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

২. প্রোপার্টিজ কনফিগারেশন

application.yml বা application.properties ফাইলে OAuth2 কনফিগারেশন যুক্ত করুন। এখানে আমরা Google-এর OAuth2 ব্যবহার করছি উদাহরণ হিসেবে:

application.yml

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: YOUR_CLIENT_ID
            client-secret: YOUR_CLIENT_SECRET
            scope:
              - openid
              - profile
              - email
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
            authorization-grant-type: authorization_code
            client-authentication-method: basic
        provider:
          google:
            authorization-uri: https://accounts.google.com/o/oauth2/v2/auth
            token-uri: https://oauth2.googleapis.com/token
            user-info-uri: https://openidconnect.googleapis.com/v1/userinfo

application.properties

spring.security.oauth2.client.registration.google.client-id=YOUR_CLIENT_ID
spring.security.oauth2.client.registration.google.client-secret=YOUR_CLIENT_SECRET
spring.security.oauth2.client.registration.google.scope=openid,profile,email
spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}
spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.google.client-authentication-method=basic
spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/v2/auth
spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token
spring.security.oauth2.client.provider.google.user-info-uri=https://openidconnect.googleapis.com/v1/userinfo

৩. RestTemplate বা WebClient-এ OAuth2 Token ব্যবহার করা

RestTemplate-এ OAuth2 Integration:

স্প্রিং সিকিউরিটির OAuth2AuthorizedClientService ব্যবহার করে টোকেন ফেচ করা হয় এবং এটি হেডারে যোগ করে API কল করা যায়।

উদাহরণ:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OAuth2RestTemplateClient {

    @Autowired
    private OAuth2AuthorizedClientService authorizedClientService;

    public String getProtectedResource(@RegisteredOAuth2AuthorizedClient("google") OAuth2AuthorizedClient authorizedClient) {
        String accessToken = authorizedClient.getAccessToken().getTokenValue();

        RestTemplate restTemplate = new RestTemplate();
        String url = "https://api.example.com/protected-resource";

        HttpHeaders headers = new HttpHeaders();
        headers.setBearerAuth(accessToken);

        HttpEntity<String> entity = new HttpEntity<>(headers);

        return restTemplate.exchange(url, HttpMethod.GET, entity, String.class).getBody();
    }
}

WebClient-এ OAuth2 Integration:

WebClient-এ ServerOAuth2AuthorizedClientExchangeFilterFunction ব্যবহার করে সিম্পল পদ্ধতিতে OAuth2 টোকেন যোগ করা যায়।

উদাহরণ:

import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;

@Service
public class OAuth2WebClient {

    private final WebClient webClient;

    public OAuth2WebClient(WebClient.Builder webClientBuilder,
                           ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2Client) {
        this.webClient = webClientBuilder
                .apply(oauth2Client.oauth2Configuration())
                .baseUrl("https://api.example.com")
                .build();
    }

    public String getProtectedResource() {
        return webClient
                .get()
                .uri("/protected-resource")
                .retrieve()
                .bodyToMono(String.class)
                .block();
    }
}

৪. কন্ট্রোলার তৈরি করা

একটি কন্ট্রোলার তৈরি করুন যা OAuth2 সুরক্ষিত API কল করবে:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OAuth2Controller {

    @Autowired
    private OAuth2RestTemplateClient restTemplateClient;

    @Autowired
    private OAuth2WebClient webClient;

    @GetMapping("/use-resttemplate")
    public String callUsingRestTemplate() {
        return restTemplateClient.getProtectedResource(null);
    }

    @GetMapping("/use-webclient")
    public String callUsingWebClient() {
        return webClient.getProtectedResource();
    }
}

৫. রিডিরেকশন এবং লগইন পেজ

OAuth2 ইনটিগ্রেশন করার পর /login এ যাওয়ার মাধ্যমে আপনি OAuth2 প্রদানকারী (যেমন: Google) এর লগইন পেজে রিডিরেক্ট হবেন।


৬. গুরুত্বপূর্ণ পয়েন্ট

  1. Access Token রিফ্রেশ: যদি টোকেন এক্সপায়ার হয়ে যায়, তাহলে স্বয়ংক্রিয়ভাবে টোকেন রিফ্রেশ করার জন্য স্প্রিং সিকিউরিটির বিল্ট-ইন ফিচার ব্যবহার করা হয়।
  2. Scope এবং Authorization Grant Type: আপনার প্রয়োজন অনুযায়ী স্কোপ এবং গ্রান্ট টাইপ নির্বাচন করুন।
  3. Custom Provider: Google ছাড়া অন্য OAuth2 প্রোভাইডারের জন্য প্রয়োজনীয় কনফিগারেশন পরিবর্তন করতে হবে।

এইভাবে আপনি স্প্রিং বুট ক্লায়েন্টে OAuth2 ইন্টিগ্রেশন করতে পারবেন এবং সুরক্ষিত API-এর সাথে যোগাযোগ করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...